package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.api.model.vo.inner.response.MemberManageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MemberNameVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.SubMemberIdRoleIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.UserPageVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.MemberIdAndNameVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleIdAndNameVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.UserQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.manage.request.*;
import com.ssy.lingxi.member.merchant.model.vo.manage.response.*;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 平台后台及业务平台 - 会员查询服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-06-03
 */
public interface IMemberManageService {
    /**
     * 查询所有角色
     * @param headers Http头部信息
     * @param roleTypeVO 接口参数
     * @return 角色列表
     */
    Wrapper<List<RoleIdAndNameVO>> allRoles(HttpHeaders headers, MemberManageRoleTypeVO roleTypeVO);

    /**
     * 查询所有下级会员角色，返回Id和角色名称列表
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<List<RoleIdAndNameVO>> listRoles(HttpHeaders headers);

    /**
     * 根据下级会员名称，模糊分页查询下级会员列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerMembersByName(HttpHeaders headers, MemberManagePageByNameVO pageVO);

    /**
     * 根据下级会员名称、下级会员角色Id，模糊分页查询下级会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerMembersByNameAndRole(HttpHeaders headers, MemberManagePageByNameAndRoleIdVO pageVO);

    /**
     * 查询上级渠道会员（包括渠道企业、渠道个人）列表，返回会员Id和名称
     * @param headers HttpHeaders信息
     * @return 操作结果
     */
    Wrapper<List<MemberIdAndNameVO>> listUpperChannelMembers(HttpHeaders headers);

    /**
     * 查询所有“下级渠道会员”的角色，返回Id和角色名称列表
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<List<RoleIdAndNameVO>> listLowerChannelRoles(HttpHeaders headers);

    /**
     * 根据下级渠道会员名称、下级渠道会员角色Id，模糊分页查询下级渠道会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerChannelMembersByNameAndRole(HttpHeaders headers, MemberManageChannelPageVO pageVO);

    /**
     * 根据下级会员名称，模糊分页查询会员角色为服务提供者的下级会员列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerProviderMembersByName(HttpHeaders headers, MemberManageNameWithExcludePageVO pageVO);

    /**
     * 根据下级会员名称，模糊分页查询会员角色为服务消费者的下级会员列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerConsumerMembersByName(HttpHeaders headers, MemberManageNameWithExcludePageVO pageVO);

    /**
     * 根据下级会员名称，模糊分页查询会员角色为服务消费者的下级会员列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerConsumerMembersByName(HttpHeaders headers, MemberManagePageByNameVO pageVO);


    /**
     * 根据下级会员名称，模糊分页查询会员角色为服务提供者的下级“企业会员”列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerMerchantProviderMembersByName(HttpHeaders headers, MemberManagePageByNameVO pageVO);

    /**
     * 根据会员名称等条件+商城类型分页查询下属会员列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageMemberByNameAndMallType(HttpHeaders headers, MemberManagePageByNameAndMallTypeVO pageVO);

    /**
     * 根据上级会员Id和上级会员角色Id，以及当前用户，查询价格权益参数设置
     * @param headers HttpHeaders信息
     * @param upperVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberManageMemberCreditParameterVO> getUpperMemberCreditParameter(HttpHeaders headers, MemberManageUpperMemberAndRoleVO upperVO);

    /**
     * 根据当前用户（上级会员），查询下级会员的价格权益参数设置
     * @param headers HttpHeaders信息
     * @param subVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberManageMemberCreditParameterVO> getLowerMemberCreditParameter(HttpHeaders headers, SubMemberIdRoleIdVO subVO);


    /**
     * 根据名称，模糊分页查询下级渠道会员列表
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerChannelMembersByNameAndRoleId(HttpHeaders headers, MemberManagePageByNameAndRoleIdVO pageVO);

    /**
     * 根据下单类型和会员名称，模糊分页查询会员
     * @param headers HttpHeaders信息
     * @param typeVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageMembersByOrderTypeAndName(HttpHeaders headers, MemberManagePageByOrderTypeAndNameVO typeVO);

    /**
     * 分页查询会员列表页面搜索条件内容
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<MemberManageSearchConditionVO> getPageSearchConditions(HttpHeaders headers, MemberManageMemberItemVO itemVO);

    /**
     * 根据当前登录会员，查询下级会员角色列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<RoleIdAndNameVO>> getSubRoleListByMember(HttpHeaders headers);

    /**
     * “新增仓位存储”：根据商城类型分页查询会员
     * @param headers HttpHeaders信息
     * @param typeVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageMembersByShopType(HttpHeaders headers, MemberManagePageByShopTypeVO typeVO);

    /**
     * 分页查询角色为“服务提供者”的会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageMembersByServiceProviderRole(HttpHeaders headers, MemberManagePageVO pageVO);

    /**
     * 分页查询角色为“服务消费者”的平台会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageMembersByServiceConsumerRole(HttpHeaders headers, MemberManagePageVO pageVO);

    /**
     * 根据会员名称，分页查询角色类型为服务提供者的平台商户会员
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pagePlatformServiceProviderMerchantMember(HttpHeaders headers, MemberManagePageByNameVO pageVO);

    /**
     * 根据会员名称，分页查询角色类型为服务提供者的平台企业会员（非企业个人会员）
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pagePlatformServiceProviderEnterpriseMember(HttpHeaders headers, MemberManagePageByNameVO pageVO);

    /**
     * 根据会员名称，分页查询角色为服务提供者的上级会员列表
     * @param headers Http头部信息
     * @param pageByNameVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageUpperProviderMember(HttpHeaders headers, MemberManagePageByNameVO pageByNameVO);

    /**
     * 根据会员名称，分页查询上级会员列表
     * @param headers Http头部信息
     * @param pageByNameVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageUpperMember(HttpHeaders headers, MemberManagePageByNameVO pageByNameVO);


    /**
     * “售后能力 - 提交换货申请单” - 选择供应会员
     * @param headers Http头部信息
     * @param pageByNameVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageAfterSaleMember(HttpHeaders headers, MemberManagePageByNameVO pageByNameVO);

    /**
     * “物流能力 - 新增物流公司” - 选择物流服务商
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLogisticSubMember(HttpHeaders headers, MemberManagePageLogisticsVO pageVO);

    /**
     * 分页查询会员下属用户
     * @param headers Http头部新
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<UserQueryVO>> pageUsers(HttpHeaders headers, UserPageVO pageVO);

    /**
     * "适用会员等级", 查询等级配置详情
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberSuitableLevelConfigVO>> pageMarketingSuitableLevelConfig(HttpHeaders headers, MemberLevelDetailPageVO pageVO);

    /**
     * “营销能力” - 获取适用会员查询条件
     * @param headers Http头部信息
     * @param typeVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberSuitableConditionVO> getMarketingSuitableCondition(HttpHeaders headers, SuitableMemberTypeVO typeVO);

    /**
     * “平台营销” - 获取适用会员查询条件
     * @param headers Http头部信息
     * @param typeVO 接口参数
     * @return 查询结果
     */
    Wrapper<PlatformMemberSuitableConditionVO> getPlatformMarketingSuitableCondition(HttpHeaders headers, PlatformSuitableMemberTypeVO typeVO);

    /**
     * “营销能力” - 查询适用会员(分页)
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberSuitableVO>> pageMarketingSuitable(HttpHeaders headers, MarketingSuitablePageVO pageVO);

    /**
     * “平台营销” - 查询适用会员(分页)
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberSuitableVO>> pagePlatformMarketingSuitable(HttpHeaders headers, MarketingSuitablePageVO pageVO);

    /**
     * “平台营销” - 获取邀请报名参加会员查询条件
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<PlatformMemberInviteConditionVO> getPlatformMarketingInviteCondition(HttpHeaders headers);

    /**
     * “平台营销” - 查询邀请报名参加会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<PlatformMarketingInvitePageVO>> pagePlatformMarketingInvite(HttpHeaders headers, PlatformMarketingInviteQueryVO pageVO);

    /**
     * “订单服务 - 代客下单” - 查询角色为服务消费者的平台会员列表
     * @param headers Http头部信息
     * @param nameVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<MemberManageQueryVO>> findPlatformConsumerMembers(HttpHeaders headers, MemberManageNameVO nameVO);

    /**
     * “订单服务 - 新增现货采购订单” - 查询供应会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageBuyerOrderMembers(HttpHeaders headers, MemberManagePageByNameVO pageVO);

    /**
     * 根据会员名称，分页查询角色为服务提供者的上级会员列表(增加条件会员等级类型为商户会员)
     * @param headers Http头部信息
     * @param pageByNameVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageUpperProviderMerchantMember(HttpHeaders headers, MemberManagePageByNameVO pageByNameVO);

    /**
     * 根据会员名称，分页查询角色为服务消费者的上级会员列表(增加条件会员等级类型为商户会员)
     * @param headers Http头部信息
     * @param pageByNameVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageUpperConsumerMerchantMember(HttpHeaders headers, MemberManagePageByNameVO pageByNameVO);

    /**
     * 根据会员名称，分页查询角色为当前会员所属的下属会员且角色类型为服务提供的会员
     * @param headers Http头部信息
     * @param pageByNameVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberManageQueryVO>> pageLowerProviderMerchantMember(HttpHeaders headers, MemberManagePageByNameVO pageByNameVO);

    /**
     * “选择采购会员”功能
     * @param headers Http头部信息
     * @param nameVO  接口参数
     * @return 新增结果
     */
    Wrapper<PageData<MemberManageQueryVO>> buyerMemberInfo(HttpHeaders headers, MemberNameVO nameVO);

    /**
     * “选择供应会员”功能
     * @param headers Http头部信息
     * @param nameVO  接口参数
     * @return 新增结果
     */
    Wrapper<PageData<MemberManageQueryVO>> supplyMemberInfo(HttpHeaders headers, MemberNameVO nameVO);
}
